/*
 * @Author: 无聊 7989314+Hwz1997@user.noreply.gitee.com
 * @Date: 2025-05-26 15:32:57
 * @LastEditors: 无聊 7989314+Hwz1997@user.noreply.gitee.com
 * @LastEditTime: 2025-08-24 17:58:01
 * @FilePath: \express-demo\middleWares\response.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
// 重写 res 的 send 方法，实现统一的响应格式
function responseFormatter(req, res, next) {
    // 保存原始的 send 方法
    const originalSend = res.send;
    // 添加标志位，用于防止递归调用
    let isFormatting = false;

    // 重写 send 方法，实现统一的响应格式
    res.send = function (data) {
        // 如果正在格式化，直接调用原始 send 方法
        if (isFormatting) {
            return originalSend.call(this, data);
        }

        // 排除特定类型响应
        if (res.get('Content-Type')?.includes('image') || data instanceof Buffer) {
            return originalSend.call(this, data);
        }

        // 设置标志位，表示正在格式化
        isFormatting = true;
        // 处理响应数据，实现统一的响应格式
        const responseData = {
            code: res.statusCode || 200, // 响应状态码，默认为200
            message: res.statusCode < 400 ? 'success' : data.message, // 响应消息，默认为 'success' 
            data: data, // 响应数据，默认为传入的数据
        };
        try {
            // 调用原始的 send 方法，发送响应数据
            return originalSend.call(this, responseData);
        } finally {
            // 格式化完成，重置标志位
            isFormatting = false;
        }
    };

    // 继续处理请求
    
    next();
}
module.exports = responseFormatter;